Bahamut Lagoon

L'algoritmo di compressione dei DeJap

Questo documento nasce con l'intenzione di spiegare come funziona il generale una compressione e si base principalmente su quella di Bahamut Lagoon.

La prima cosa che dobbiamo sapere è molto semplice, ogni byte corriponde a 8 bit, il bit può essere 0 o 1, i bit si leggono da destra verso sinistra e nn viceversa come nella normalità. Ma cmq, baldo alle ciance, iniziamo subito a capire come funziona. In pratica c'è un primo byte chiamato RICONOSCITORE e dopo c'è una seguenza di 8 byte. Per capire se ci sono o non ci sono byte compressi bisogna prendere il byte riconoscitore e scomporlo in bit e leggerlo da destra verso sinistra, i bit 0 coripondono ai dati NON compressi mentre i bit 1 sono quelli compressi. Faccio un es:

00 66 61 6C 6C 20 6F 66 20

Il byte 00 è il riconoscitore e la sua scomposizione binaria è: 00000000. Per tanto visto che sono tutti 0 significa che tutti gli 8 byte dopo sono decompressi e non necessitano di esser trattati vengono copiati nel file decompresso. Ora invece passiamo al caso contrario, quello in cui ci siano dei dati compressi:

02 67 12 30 3A 20 42 61 68 61

Ora il byte riconoscitore corriponde a 02 che scomposto in forma binaria è: 00000010. Come notate c'è un 1 quindi ci sono dei dati compressi, per capire quali sono basta invertirlo -> 01000000 per tanto il secondo byte. Al contrario dei byte che non necessitano di "trattamento" (ovvero i bit 0) i bit 1 coripondono a 2 byte che saranno essenziali. Per semplificarvi la vita vi ho selezionati in rosso i byte compressi. Fino ad ora ho sempre usato la parola "compresso" in realtà questi 2 byte hanno 1 altro scopo, quello di eseguire un SALTO ed effettuare un RECUPERO dei byte. In pratica prendiamo quei 2 byte ovvero 12 e 30 e scomponiamoli in binari -> 12 = 00010010 - 30 = 00110000 ora scomponiamoli a gruppetti di 4 bit e rinominiamoli mentalmente:

0001(A) - 0010(B) - 0011(C) - 0000(D)

Ora bisogna capire di quanti byte saltellare indietro e quanti prenderne. Nulla di più semplice il salto ccorisponde alla forma decimale di D-A-B mentre il recupero corrisponde a C+3. Non ci avete capito nulla eh ? Per semplificarvi la vita fate così: Aprite la calcolatrice di winzozz, settatela come scentifica, andate in modalità binaria e scrivete il numero DAB ovvero -> 0000 00001 0010 (sulla calcolatrice verrà scritto solo 10010) ora convertitelo in decimali e otterete il numero del salto da effettuare (18), per sapere il numero di byte da recuperare è la stessa cosa, prendete C e convertitelo in decimale ovvero 0011 -> 3 ora aggiungiamo il numero 3 in modalità decimale è la somma sarà 6 quindi dovrete saltare indietro di 18 byte e copiarne 6 al posto di quei due (12 30). Ovviamento il "salto & recupero" deve esser effettuato nei dati DEcompressi.

Tutto quì, questa è la semplice compressione di Bahamut Lagoon.

Un grazie speciale va a _mat_ e Gemini che mi hanno aiutato a capire le compressioni in generale, per qualsiasi cosa mandatemi pure una e-mail ciao e alla prossima lezione.